如果提供一个RedisMetricRepository
类型的@Bean
并注解@ExportMetricWriter
,指标将导出到Redis缓存完成聚合。RedisMetricRepository
有两个重要参数用于配置实现这样的目的:prefix
和key
(传递给构造器)。最好使用应用实例唯一的前缀(比如,使用一个随机值及应用的逻辑name,这样可以关联相同应用的其他实例)。“key”用来保持所有指标name的全局索引,所以它应该全局唯一,不管这对于你的应用意味着什么(比如,相同系统的两个实例可以共享一个Redis缓存,如果它们有不同的keys)。
示例:
@Bean
@ExportMetricWriter
MetricWriter metricWriter(MetricExportProperties export) {
return new RedisMetricRepository(connectionFactory,
export.getRedis().getPrefix(), export.getRedis().getKey());
}
application.properties
:
spring.metrics.export.redis.prefix: metrics.mysystem.${spring.application.name:application}.${random.value:0000}
spring.metrics.export.redis.key: keys.metrics.mysystem
前缀最后由应用名和id组成,所以它可以用来标识具有相同逻辑名的processes分组。
注 设置key
和prefix
都是非常重要的。key用于所有的仓库操作,并可以被多个仓库共享。如果多个仓库共享一个key(比如你需要聚合它们的时候),你通常有一个只读“master”仓库,它有一个简短的但可辨识的前缀(比如metrics.mysystem
),还有很多只写的仓库,这些仓库以master前缀开头(比如以上示例中为metrics.mysystem.*
)。这样从一个"master"仓库读取所有keys是相当高效的,但使用较长的前缀读取一个子集就比较低效了(比如使用一个写仓库)。
注 以上示例使用MetricExportProperties
去注入和提取key和前缀,这是Spring Boot提供的便利设施,用于配置合适的默认值,你也可以自己设值。